package freelinz.smart.gwtex.client.ui;

import com.google.gwt.user.client.ui.Widget;

/**
 * 
 * @author wpeace
 * 
 */
public interface SmartKitsAll
{
    public interface ResizedListener
    {
        /**
         * 
         * @param width 宽度
         * @param height 高度
         */
        public void resized(int width, int height);
    }
    public interface Resized extends ResizedListener
    {
        public Widget getWidget();
    }

    public interface SmartKitI extends Resized
    {
        /**
         * 忝加 Widget，不能是自己，只能忝加一个，如果要修改，请先调用 {@link #removeResizedWidget(Resized)}
         * @param w Widget
         */
        public void addResizedWidget(Resized w);
        /**
         * 移除由 {@link #addResizedWidget(Resized)}忝加的Widget
         * @param w 要清除的widget，可以为空
         *
         */
        public void removeResizedWidget(Resized w);
        
        public Resized getResizedWidget();
        
        /**
         * 设置相对于将于父对象的显示高度或宽度比例
         * @param width 为空时，不设置宽度比例
         * @param height 为空时，不设置高度比例
         */
        public void setSizeScale(Float width,Float height);
        
        public int getWidth();

        public int getHeight();

        public SmartKitsI getParentSmartKits();

        public void setParentSmartKits(SmartKitsI smartKitsI);
        
        public void addResizedListener(ResizedListener listener);
        
        public void removeResizedListener(ResizedListener listener);
        
        public void fireResized(int width, int height);
        
        public void clear();
        
        public int getOpenClose();
        
        public void setOpenClose(int openClose);

        public boolean equals(Object obj);

        public int hashCode();
    }
    
    public interface SmartKitsI extends SmartKitI
    {
        /**
         * 不能忝加自己，参数one与two不同相，同一个smartKit不能增加两次
         * 
         * @param one 智能组件1，可以为空，此时取上一次忝加的最后一个作为one
         * @param two 智能组件2
         * @param spliter 分割条
         */
        public void addSmartKit(SmartKitI one, SmartKitI two, SpliterI spliter);

        public int getOffsetTop();

        public void setOffsetTop(int offsetTop);

        public int getOffsetLeft();

        public void setOffsetLeft(int offsetLeft);
        
        /**
         * 
         * @param smartKitI smartKit
         * @param direction 操作（拖动方向或开合状态）
         * @param changeX 在拖动时为变化的大小，在开合是时无意义值
         * @param changeY TODO
         */
        public void resized(SmartKitI smartKitI, int direction , int changeX, int changeY);

        public interface Direction
        {
            ///////////////////////拖动方向
            public int LEFT  = 1;
            public int RIGTH = 2;
            public int TOP   = 4;
            public int BOTTOM= 8;
            /////////////////////////
            /////////////////////////开、合、中三种状态
            public int CLOSE = 16;
            public int OPEN  = 32;
            public int MIDDLE = 64;
            /////////////////////////
        }
    }
    
    public interface SpliterI extends SmartKitI
    {
        public interface SpliterType
        {
            public int V = 1; //水平
            public int H = 2; //垂直
        }
        public SmartKitI getOne();
        public void setOne(SmartKitI one);
        public SmartKitI getTwo();
        public void setTwo(SmartKitI two);
        public int getVH();
        public void setVH(int vh);
        //当对象的值小于此值时不允许拖动
        public int minValue = 50;
    }

}
